package com.lab.vo;

import lombok.Data;

import java.time.LocalDateTime;

/**
 * 实验室成员VO（视图对象）
 * 用于向前端返回成员的完整信息，优化状态字段的展示形式，便于前端直接渲染成员列表或详情
 */
@Data
public class MemberVO {

    /**
     * 成员ID
     * 对应实体类id字段，用于前端标识单个成员（如编辑、查看详情操作）
     */
    private Integer id;

    /**
     * 成员姓名
     * 对应实体类name字段，展示成员的真实姓名
     */
    private String name;

    /**
     * 年级
     * 对应实体类grade字段，展示成员的年级信息（如"2022级"、"研一"）
     */
    private String grade;

    /**
     * 专业
     * 对应实体类major字段，展示成员的专业名称
     */
    private String major;

    /**
     * 学号
     * 对应实体类studentId字段，展示11位数字的学号（业务约定）
     */
    private String studentId;

    /**
     * 角色类型
     * 对应实体类roleType字段，展示成员在实验室的角色（如"前端"、"后端"）
     */
    private String roleType;

    /**
     * 是否请假（布尔值）
     * 由实体类isOnLeave（TINYINT）转换而来：0→false（未请假），1→true（已请假）
     * 相比数字类型更直观，便于前端直接判断并展示状态（如标红显示请假成员）
     */
    private boolean isOnLeave;

    /**
     * 加入时间（创建时间）
     * 对应实体类createTime字段，展示成员加入实验室的时间，用于排序或筛选
     */
    private LocalDateTime createTime;

    /**
     * 密码（加密展示）
     * 对应实体类password字段，返回加密后的密文（前端通常不展示完整密码，仅用于特殊场景如密码重置确认）
     * 注意：生产环境中建议根据接口权限控制是否返回此字段，避免安全风险
     */
    private String password;

    /**
     * 登录角色
     * 对应实体类role字段，展示成员的系统登录角色（如"admin"、"student"、"teacher"）
     * 用于前端根据角色判断操作权限（如管理员可见的功能按钮）
     */
    private String role;
}